package com.blue.firecat.utils.data;

import java.io.*;

/**
 * @描述
 * @时间 2017-6-23 19:36
 * @作者 肖亦鸣
 */
public class MySQLDatabaseImport {
    /**
     * Java实现MySQL数据库导入
     *
     * @param hostIP         MySQL数据库所在服务器地址IP
     * @param userName       数据库用户名
     * @param password       进入数据库所需要的密码
     * @param importFilePath 数据库文件路径
     * @param sqlFileName    数据库文件名
     * @param databaseName   要导入的数据库名
     * @return 返回true表示导入成功，否则返回false。
     * @author GaoHuanjie
     */
    public static boolean importDatabase(String hostIP, String userName, String password, String importFilePath, String sqlFileName, String databaseName) {
        File saveFile = new File(importFilePath);
        if (!saveFile.exists()) {// 如果目录不存在
            saveFile.mkdirs();// 创建文件夹
        }
        if (!importFilePath.endsWith(File.separator)) {
            importFilePath = importFilePath + File.separator;
        }

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("cmd /c ").append("mysql").append(" -h").append(hostIP);
        stringBuilder.append(" -u").append(userName).append(" -p").append(password);
        stringBuilder.append(" ").append(databaseName);
        stringBuilder.append(" <").append(importFilePath).append(sqlFileName);
        try {
            Process process = Runtime.getRuntime().exec(stringBuilder.toString());//必须要有“cmd /c ”
            if (process.waitFor() == 0) {// 0 表示线程正常终止。
                return true;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return false;
    }

    public static void main(String[] args) throws Exception {
        if (importDatabase("119.29.182.145", "root", "root", "D:/", "2014-10-14.sql", "firecat")) {
            System.out.println("数据库导入成功！！！");
        } else {
            System.out.println("数据库导入失败！！！");
        }

        recover("D:/2014-10-14.sql");
    }

    public static void recover(String path) throws IOException {
        Runtime runtime = Runtime.getRuntime();
        //-u后面是用户名，-p是密码-p后面最好不要有空格，-family是数据库的名字，--default-character-set=utf8，这句话一定的加
        //我就是因为这句话没加导致程序运行成功，但是数据库里面的内容还是以前的内容，最好写上完成的sql放到cmd中一运行才知道报错了
        //错误信息：
        //mysql: Character set 'utf-8' is not a compiled character set and is not specified in the '
        //C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\Index.xml' file ERROR 2019 (HY000): Can't
        // initialize character set utf-8 (path: C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\)，
        //又是讨人厌的编码问题，在恢复的时候设置一下默认的编码就可以了。
        Process process = runtime.exec("mysql -u root -proot --default-character-set=utf8 firecat");
        OutputStream outputStream = process.getOutputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
        String str = null;
        StringBuffer sb = new StringBuffer();
        while ((str = br.readLine()) != null) {
            sb.append(str + "\r\n");
        }
        str = sb.toString();
//        System.out.println(str);
        OutputStreamWriter writer = new OutputStreamWriter(outputStream, "utf-8");
        writer.write(str);
        writer.flush();
        outputStream.close();
        br.close();
        writer.close();
    }
}
